import utils from './utils';

/**
 * 该函数用于获取节点在文档中的布局区域信息，统一处理普通元素和窗口对象，返回包含位置和尺寸的完整区域描述对象。
 * getRegion函数是一个统一获取节点区域信息的方法，它能够处理普通元素和window/document对象，返回一个具有left、top、width、height属性的对象。
 * @param  {[type]}
 * @return {[type]}
 */
function getRegion(node) {
  let offset;
  let w;
  let h;
  // 判断节点是否是window或者document（nodeType为9）？如果不是，则获取节点的offset位置和宽高。
  if (!utils.isWindow(node) && node.nodeType !== 9) {
    offset = utils.offset(node);
    w = utils.outerWidth(node);
    h = utils.outerHeight(node);
  } else {
    // 如果是window或document，则获取其滚动位置和视口的宽高。
    const win = utils.getWindow(node);
    offset = {
      left: utils.getWindowScrollLeft(win),
      top: utils.getWindowScrollTop(win),
    };
    w = utils.viewportWidth(win);
    h = utils.viewportHeight(win);
  }

  offset.width = w;
  offset.height = h;
  
  // 对于普通元素，区域信息是该元素在页面中的位置（相对于文档的偏移）和它的尺寸（包含边框）。
  // 对于window或document，区域信息是当前视口的信息（滚动位置和视口大小）。注意：这里返回的left和top是滚动条的位置，width和height是视口的宽高。
  return offset;
}

export default getRegion;
